<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>监视属性_weather_watch_deep</title>
		<script src="./js/vue.js"></script>
	</head>
	<body>
		<!--
		深度监视
		(1):Vue中watch默认不监测对象内部值的改变(一层)
		(2):配置deep:true可以监测对象内部值改变(多层)
		备注:
		(1):Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以(为了效率)！
		(2):使用watch时根据数据的具体结构,决定是否采用深度监视
		-->
		<div id="root">
			<h2>今天天气很{{info}}</h2>
			<button @click="isHot = !isHot">切换天气</button>
			<hr />
			<h3>a的值是:{{numbers.a}}<h3>
			<button @click="numbers.a++">点我让a+1</button>
			<h3>b的值是:{{numbers.b}}<h3>
			<button @click="numbers.b++">点我让b+1</button><br />
			<span>{{numbers.c.d.e}}</span>
		</div>
		<script>
			Vue.config.productionTip = false;
			const vm = new Vue({
				el:'#root',
				data:{
					isHot:true,
					x:1,
					numbers:{
						a:1,
						b:1,
						c:{
							d:{
								e:100
							}
						}
					}
				},
				computed:{
					info(){
						return this.isHot ? '炎热' : '凉爽';
					}
				},
				methods:{},
				watch:{
					// 监视多级结构中某个属性的变化
					'numbers.a':{
						handler() {
							console.log('a被改变了');
						}
					},
					// 监视多级结构中所有属性的变化
					numbers:{
						deep:true,
						handler() {
							console.log('numbers被改变了');
						}
					},
					// isHot:{
					// 	immediate:true,//初始化时让handler调用一下
					// 	handler(newVal,oldVal){
					// 		console.log('isHot被修改了',newVal,oldVal);
					// 	}
					// }
				}
			});
			vm.$watch('numbers.b',function(newVal,oldVal){
				console.log('numbers.b的值被改变了',newVal,oldVal);
			});
		</script>
	</body>
</html>